// Learn cc.Class:
//  - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/class.html
//  - [English] http://docs.cocos2d-x.org/creator/manual/en/scripting/class.html
// Learn Attribute:
//  - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html
//  - [English] http://docs.cocos2d-x.org/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
//  - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html
//  - [English] https://www.cocos2d-x.org/docs/creator/manual/en/scripting/life-cycle-callbacks.html


var curMod = cc.Class({
    extends: cc.Component,

    properties: {
        // foo: {
        //     // ATTRIBUTES:
        //     default: null,        // The default value will be used only when the component attaching
        //                           // to a node for the first time
        //     type: cc.SpriteFrame, // optional, default is typeof default
        //     serializable: true,   // optional, default is true
        // },
        // bar: {
        //     get () {
        //         return this._bar;
        //     },
        //     set (value) {
        //         this._bar = value;
        //     }
        // },
    },

    statics: {
        _instance: null,
        InterstitialAdId: 'b303adaf0b644b62880eaf8abd0c3a15',
        RewardedVideoAdId: ['a29cd24669634b4394f418e925311c62', '4ec86b4f094d4da19ad0dd8f02515464', '32f4d32cc6754142891c5240a59da5ba', 'ad9b1e23462b4b69aced6e24ccd19cfd', 'd7ebb116fdf94ff4b5e5dfe33256403e', 'a969097fc87141c2b3c9e423606781f2'],
        BannerIds: ['01eb2859c28f4b9aa00c67b769e99eaa', 'c90d79e901f745778f36b472f75231a5', 'b2238014611a46c2bbf30f32c3eade31', '75a7b07f1eb340d085d5763997041f5d', 'ae8c539dd7e64fabad347af4e3734cda', '26b74cf17e254d6c896e37d2d87ee9fe', '4fd35b9293224527bfcf612fae065f57', 'a66ab1f64aac443586b369aad90e4669', 'a2d28077d1584822b0bc1a7a34d2449d'], //, 'adunit-905904089942c58e'],

        ShareTitle: '高分全凭手速快！',
        //ShareImgId: '5JWEBFBdTHiZ5EcslmutbA==', // 通过 MP 系统审核的图片编号
        //ShareImgUrl: 'https://mmocgame.qpic.cn/wechatgame/3gfJUsiaHCx28sibf4QvxkWEwK6UicbQricJn4M7ia9OoUIPaDXXn1tib6eSZWtpu7hOGz/0',

        _wxUserInfo: {},
        _systemInfo: {},

        Instance() {
            return curMod._instance;
        },
        GetInfo() {
            return curMod._wxUserInfo;
        },
    },

    onLoad() {
        console.log('vivo onload, curMod._instance=', curMod._instance);
        if (curMod._instance) {
            return;
        }
        curMod._instance = this;

        if (require('GameMgr').Instance().ApiType !== 3) {
            return;
        }
        //...
        this.setLogin();//用户登录，获取用户信息
    },

    start() {
    },

    // update (dt) {},
    //分享
    shareAppMessage() {
        if (require('GameMgr').Instance().ApiType !== 3) {
            return;
        }
        var self = this;
        qg.share({
            success: function () {
                qg.showToast({
                    message: "分享成功"
                });
                require('GameMgr').Instance().setDaily(5);
                require('GameMgr').Instance().ShowADrewords();
                this.isShared = true;
            },
            fail: function (erromsg, errocode) {
                require('GameMgr').Instance().showTip("分享失败，请稍后再试", 0, "取消", "确定", function () {
                }, function () { return; });
                qg.showToast({
                    message: "分享失败：" + errocode + ': ' + erromsg
                });
            },
            cancel: function () {
                require('GameMgr').Instance().showTip("分享取消，获取奖励失败", 0, "取消", "确定", function () {
                }, function () { return; });
                qg.showToast({
                    message: "分享完成"
                });
            },
            complete: function () {
                qg.showToast({
                    message: "分享调用完成"
                });
            },
        });
    },
    //显示插屏广告
    showInterstitialAd() {
        if (require('GameMgr').Instance().ApiType !== 3) {
            return;
        }
        let interstitialAd = qg.createInterstitialAd({
            posId: curMod.InterstitialAdId
        });
        let adShow = interstitialAd.show();
        adShow && adShow.then(() => {
            console.log("插屏广告展示成功");
        }).catch((err) => {
            switch (err.code) {
                case 30003:
                    console.log("新用户1天内不能曝光Banner，请将手机时间调整为1天后，退出游戏重新进入")
                    break;
                case 30009:
                    console.log("10秒内调用广告次数超过1次，10秒后再调用")
                    // setTimeout(() => {
                    //     show()
                    // }, 10000);
                    break;
                case 30002:
                    console.log("load广告失败，重新加载广告")
                    // setTimeout(() => {
                    //     retryShow()
                    // }, 10000);  
                    break;
                default:
                    // 参考 https://minigame.vivo.com.cn/documents/#/lesson/open-ability/ad?id=广告错误码信息 对错误码做分类处理
                    console.log("插屏广告展示失败")
                    console.log(JSON.stringify(err))

                    break;
            }
        });
    },
    //显示视频广告
    showRewardedVideoAd(index) {
        if (require('GameMgr').Instance().ApiType !== 3) {
            return;
        }// showToast 上线之前一定要去掉!
        // 错误的回调，creat的是在onerror里面，load，show等的回调在自己的catch里面

        console.log("激励广告加载", index);
        let rewardedAd;
        rewardedAd = qg.createRewardedVideoAd({
            posId: curMod.RewardedVideoAdId[index]
        });
        rewardedAd.onError(err => {
            switch (err.errCode) {
                case -3:
                    console.log("激励广告加载失败---调用太频繁", JSON.stringify(err));
                    require('GameMgr').Instance().showTip("广告加载失败，观看太频繁\n请稍后再试", 0, "取消", "确定", function () {
                    }, function () { return; });
                    break;
                case -4:
                    console.log("激励广告加载失败--- 一分钟内不能重复加载", JSON.stringify(err));
                    require('GameMgr').Instance().showTip("广告加载失败\n一分钟内不能重复加载\n请稍后再试", 0, "取消", "确定", function () {
                    }, function () { return; });
                    break;
                case 30008:
                    // 当前启动来源不支持激励视频广告，请选择其他激励策略
                    break;
                default:
                    // 参考 https://minigame.vivo.com.cn/documents/#/lesson/open-ability/ad?id=广告错误码信息 对错误码做分类处理
                    console.log("激励广告展示失败")
                    console.log(JSON.stringify(err))
                    require('GameMgr').Instance().showTip(JSON.stringify(err.data.errMsg) + "\n请稍后再试", 0, "取消", "确定", function () {
                    }, function () { return; });
                    break;
            }
        })

        rewardedAd.onClose(res => {
            require('GameMgr').Instance().resumeBgm();
            if (res && res.isEnded) {
                console.log("正常播放结束，可以下发游戏奖励");
                require('GameMgr').Instance().ShowADrewords();
                require('GameMgr').Instance().setDaily(2);

            } else {
                console.log("播放中途退出，不下发游戏奖励");
                require('GameMgr').Instance().showTip("中途退出，获取奖励失败", 0, "取消", "确定", function () {
                }, function () { return; });
            }
        });

        // 第一次creat后广告可以在onload里面直接show
        // 后续的加载必须要load才能触发onload接着才能show出广告
        let adLoad = rewardedAd.load();//第一次调用 可能会报-3  广告能正常展示就可以忽略
        // 捕捉load失败的错误
        adLoad && adLoad.catch(err => {
            console.log("激励广告load失败" + JSON.stringify(err))
        })
        rewardedAd.onLoad(() => {
            let adshow = rewardedAd.show();
            require('GameMgr').Instance().StopBgm();
            // 捕捉show失败的错误
            adshow && adshow.catch(err => {
                console.log("激励广告展示失败" + JSON.stringify(err))
            })
        })
    },

    //显示底部广告
    showBannerAd(index) {
        if (require('GameMgr').Instance().ApiType !== 3) {
            return;
        }
        console.log("创建banner广告", index);
        this._bannerAds = qg.createBannerAd({
            posId: curMod.BannerIds[index],
            style: {}
        });
        let adshow = this._bannerAds.show();
        // 调用then和catch之前需要对show的结果做下判空处理，防止出错（如果没有判空，在平台版本为1052以及以下的手机上将会出现错误）
        var self = this;
        adshow && adshow.then(() => {
            console.log("banner广告展示成功");
        }).catch((err) => {
            switch (err.code) {
                case 30003:
                    console.log("新用户1天内不能曝光Banner，请将手机时间调整为1天后，退出游戏重新进入")
                    break;
                case 30009:
                    console.log("10秒内调用广告次数超过1次，10秒后再调用")
                    // setTimeout(() => {
                    //     show()
                    // }, 10000);
                    break;
                case 30002:
                    console.log("加载广告失败，重新加载广告")
                    setTimeout(() => {
                        self.retryShow();
                    }, 10000);
                    break;
                default:
                    // 参考 https://minigame.vivo.com.cn/documents/#/lesson/open-ability/ad?id=广告错误码信息 对错误码做分类处理
                    console.log("banner广告展示失败")
                    console.log(JSON.stringify(err))
                    break;
            }
        });
    },
    //banner重加载
    retryShow() {
        if (require('GameMgr').Instance().ApiType !== 3) {
            return;
        }
        let bannerAdRetey = qg.createBannerAd({
            posId: 'xxxxx',
            style: {}
        })
        let adShowRetry = bannerAdRetey.show()
        adShowRetry && adShowRetry.catch((error) => {
            console.log("banner广告展示失败-重试")
            console.log(JSON.stringify(error))
        })
    },

    //隐藏所有底部广告
    hideBannerAds() {
        if (require('GameMgr').Instance().ApiType !== 3) {
            return;
        }
        if (this._bannerAds) {
            var adhide = this._bannerAds.hide();
            adhide && adhide.then(() => {
                console.log("banner广告隐藏成功");
            }).catch(err => {
                console.log("banner广告隐藏失败", err);;
            });
        }
    },


    setLogin() {
        var id = require('GameMgr').Instance().ApiType;
        console.log("渠道ID：" + id);
        var self = this;
        if (require('GameMgr').Instance().ApiType === 3) {
            if (qg.getSystemInfoSync().platformVersionCode >= 1053) {
                qg.login().then((res) => {
                    console.log("登录成功", res);
                    console.log(res);
                    if (res.data.token) {
                        require('GameMgr').Instance().setresCode(res.data.token);
                        // 使用token进行服务端对接
                        require('GameMgr').Instance().sendData("login", { "code": res.data.token, "channelId": id }, function (data) {
                            if (data.code === 0) {
                                console.log("返回数据", data);
                                require('GameMgr').Instance().setLogin(data.uid, data.token, data);
                                require('GameMgr').Instance().setGameStart();
                            }
                            else {
                                console.log("连接失败", data);
                                let self1 = self;
                                require('GameMgr').Instance().showTip("请授权登录", 2, "取消", "确定", function () {
                                    cc.director.loadScene('LoadScene');
                                }, function () {
                                    self1.getVivoInfo();
                                    return;
                                });
                                return;
                            }
                        });
                    }
                }, (err) => {
                    console.log('登录失败' + JSON.stringify(err));
                    self.setLogin(); // 重新登录
                    //cc.director.loadScene('LoadScene');
                });
            }
        }
    },
    /**
     * 获取微信信息
     */
    getVivoInfo() {
        /*
                var id = require('GameMgr').Instance().ApiType;
                console.log("渠道ID：" + id);
        
                if (require('GameMgr').Instance().ApiType === 3) {
                    if (qg.getSystemInfoSync().platformVersionCode >= 1053) {
                        qg.login().then((res) => {
                            console.log("登录成功", res);
                            console.log(res);
                            if (res.data.token) {
                                require('GameMgr').Instance().setresCode(res.data.token);
                                // 使用token进行服务端对接
                                require('GameMgr').Instance().sendData("login", { "code": res.data.token, "channelId": id }, function (data) {
                                    if (data.code === 0) {
                                        console.log("返回数据", data);
                                        require('GameMgr').Instance().setLogin(data.uid, data.token, data);
                                        require('GameMgr').Instance().setGameStart();
                                    }
                                    else {
                                        console.log("连接失败", data);
                                        let self1 = self;
                                        require('GameMgr').Instance().showTip("请授权登录", 2, "取消", "确定", function () {
                                            cc.director.loadScene('LoadScene');
                                        }, function () {
                                            self1.getVivoInfo();
                                            return;
                                        });
                                        return;
                                    }
                                });
                            }
                        }, (err) => {
                            console.log('登录失败' + JSON.stringify(err));
                            cc.director.loadScene('LoadScene');
                        });
                    }
                }*/
        //获取登录信息
        if (qg.getSystemInfoSync().platformVersionCode >= 1053) {
            qg.getUserInfo().then((res) => {
                if (res.data) {
                    console.log('当前用户信息: ' + JSON.stringify(res.data));
                    curMod._wxUserInfo = res.data;
                    //此时可进行登录操作
                    //console.log('curMod._wxUserInfo=' + JSON.stringify(curMod._wxUserInfo));
                    var imgurl = curMod._wxUserInfo.smallAvatar + "?aaa=aa.jpg";
                    require('GameMgr').Instance().setplUrl(imgurl);
                    var name = res.data.nickName;
                }
            }, (err) => {
                console.log('获取用户信息失败' + JSON.stringify(err));
                require('GameMgr').Instance().showTip("请授权登录\n不然无法正常进行游戏", 2, "取消", "确定", function () {
                    cc.director.loadScene('LoadScene');
                }, function () {
                    self1.getVivoInfo();
                    return;
                });
            });
        }
    },

    printInfo(res) {
        // console.log('设备品牌:', res.brand)
        // console.log('设备型号:', res.model)
        // console.log('设备像素比:', res.pixelRatio)
        // console.log('屏幕宽度:', res.windowWidth)
        // console.log('屏幕高度:', res.windowHeight)
        // console.log('状态栏的高度:', res.statusBarHeight)
        // console.log('微信设置的语言:', res.language)
        // console.log('微信版本号:', res.version)
        // console.log('操作系统及版本:', res.system)
        // console.log('客户端平台:', res.platform)
        // console.log('用户字体大小:', res.fontSizeSetting)
        // console.log('客户端基础库版本 :', res.SDKVersion)
        // console.log('设备性能等级:', res.benchmarkLevel)
        if (res.system.indexOf('Android') != -1) {
            curMod._isAndroid = true;
        }
    },
});
